!==================Programa que calcula e^x pela série==================

PROGRAM exer01

!=======================================================================

IMPLICIT NONE

!========================Declaração de variáveis========================

      REAL(8) :: pot, resul, resul_prev, termo!, fat
      INTEGER :: I!, fat

!=======================Inicializa as variáveis=========================

      pot = 0.0d0
      resul = 1.0d0
      resul_prev = 0.0d0
      termo = 1.0d0
      I = 1
      !fat = 1.0d0

!========================Leitura da potência============================

      WRITE(*,*) 'Entre com x para calcularmos e^x'
      READ(*,*) pot
      
!====================Cálculo de e^x pela série==========================

      DO WHILE ((resul-resul_prev) > 0.00001d0)
            !fat = fat * I !Comentar essa linha com a função
            resul_prev = resul
            termo = termo * pot/I
            !resul = resul + (pot**I)/fat(I)
            WRITE(*,*) termo
            resul = resul + termo!(resul_prev * pot/I)
            !IF ((resul-resul_prev) < 0.00001d0) THEN
            !      EXIT
            !END IF
            I = I + 1
      END DO
      !Escreve a saída
      WRITE(*,*) 'O resultado na exponenciação é', resul

!=======================================================================

END PROGRAM exer01

!=======================Subprograma fatorial============================

!RECURSIVE INTEGER FUNCTION fat(n) result(F)
!      IMPLICIT NONE
!      INTEGER n
!     INTEGER F
!      IF (n==0) THEN
!            F = 1
!      ELSE
!            F = n*fat(n-1)
!      END IF
!      RETURN
!END FUNCTION fat

!=======================================================================

